/**
 * 
 */
package com.kingpigeon.iotsvrdemo;

import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;

/**
 * @author xuhw
 *
 */
public class RTUCMD70UP {

	private ChannelHandlerContext ctx;
	private byte[] data;
	/**
	 * 
	 */
	public RTUCMD70UP(ChannelHandlerContext ctx, byte[] data) {
		this.ctx = ctx;
		this.data = data;
	}
	public void RTUCMD70UPHandler()
	{
		/**
		 * 0x70（上行）请求报文数据包内容
		字段名	长度（Byte)	数据类型	说明
		设备ID	15	ASCII码	具体ASCII码的解析算法参考<8.4.ASCII码类型字段解包/组包样例代码>
		传感器类型	1	整型	传感器类型，详见<7. 数据字典>
		传感器地址	1	整型	传感器地址，详见<7.1.数据字典>
		报警状态	1	整型	字段传感器类型值为DIN（0x03）时，0代表恢复，1代表报警，2代表间隔报警，3代表总值报警，4变位报警；
						字段传感器类型值为继电器（0x05）时，为1代表闭合，为0代表断开；
						字段传感器类型值为AIN（0x02）或温湿度（0x04）时，0代表恢复，1代表低报警，2代表高报警；
		传感器具体数据	0~N		传感器具体数据，详情参见<公共报文结构>
		 */
    	String sMac = KingPigeonUtils.bytesToAscii(data,8,15);
    	System.out.println("sMac:"+sMac);
		String sAlarmSensorType = KingPigeonUtils.bytesToHexString(data, 23, 1);
	  	System.out.println("sAlarmSensorType:"+sAlarmSensorType);
		String sAlarmSensorAddr = KingPigeonUtils.bytesToHexString(data, 24, 1);
      	System.out.println("sAlarmSensorAddr:"+sAlarmSensorAddr);
		if(sAlarmSensorType.equals("02")||sAlarmSensorType.equals("04")) {
			/*字段传感器类型值为AIN（0x02）或温湿度（0x04）时，0代表恢复，1代表低报警，2代表高报警；*/
			System.out.println("报警状态的数据（0代表恢复，1代表低报警，2代表高报警）为:"+KingPigeonUtils.byteToIntLe(data[25]));
		}
		else if(sAlarmSensorType.equals("03")) {
			/*字段传感器类型值为DIN（0x03）时，0代表恢复，1代表报警，2代表间隔报警，3代表总值报警，4变位报警；*/
			System.out.println("报警状态的数据（0代表恢复，1代表报警，2代表间隔报警，3代表总值报警，4变位报警）为:"+KingPigeonUtils.byteToIntLe(data[25]));
		}else if(sAlarmSensorType.equals("05")) {
			/*字段传感器类型值为继电器（0x05）时，为1代表闭合，为0代表断开；*/
			System.out.println("报警状态的数据（1代表闭合，为0代表断开）为:"+KingPigeonUtils.byteToIntLe(data[25]));		
		}
    	for(int iOffset=28;data.length>iOffset+6;iOffset=iOffset+6)
    	{
			String sSensorType = KingPigeonUtils.bytesToHexString(data, iOffset, 1);
			String sSensorAddr = KingPigeonUtils.bytesToHexString(data, iOffset+1, 1);
	    	System.out.println("sSensorType:"+sSensorType);
	    	System.out.println("sSensorAddr:"+sSensorAddr);
			if(sSensorType.equals("01")) {
				if(sSensorAddr.equals("00")) {
					Float fSensorData = KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2);
					System.out.println("传感器1的数据为:"+fSensorData);
				}else if(sSensorAddr.equals("01")) {
					System.out.println("传感器2的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("02")) {
					System.out.println("传感器3的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("03")) {
					System.out.println("传感器4的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}
			}else if(sSensorType.equals("02")){
				if(sSensorAddr.equals("00")) {
					System.out.println("AIN0的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("01")) {
					System.out.println("AIN1的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("02")) {
					System.out.println("AIN2的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("03")) {
					System.out.println("AIN3的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("04")) {
					System.out.println("AIN4的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("05")) {
					System.out.println("AIN5的数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}
			}else if(sSensorType.equals("03")){
				if(sSensorAddr.equals("00")) {
					/*数据中bit28～31代表类型，1代表常闭，2代表常开，3代表变位，5计数器；*/
					System.out.println("DIN0的类型（1代表常闭，2代表常开，3代表变位，5计数器）为:"+KingPigeonUtils.bytesToHexString(data, iOffset+2+3,1).charAt(1));
					/*数据中bit27~bit0代表具体数值，数据类型为整型；*/
					byte[] bytesTmp = new byte[4];
			        System.arraycopy(data, iOffset+2, bytesTmp, 0, 4); 
			        bytesTmp[3]=(byte) (bytesTmp[3]&0xF0);
			        System.out.println("DIN0的数据为:"+KingPigeonUtils.bytesToIntLe(bytesTmp));
				}else if(sSensorAddr.equals("01")) {
					/*数据中bit28～31代表类型，1代表常闭，2代表常开，3代表变位，5计数器；*/
					System.out.println("DIN1的类型（1代表常闭，2代表常开，3代表变位，5计数器）为:"+KingPigeonUtils.bytesToHexString(data, iOffset+2+3,1).charAt(1));
					/*数据中bit27~bit0代表具体数值，数据类型为整型；*/
					byte[] bytesTmp = new byte[4];
			        System.arraycopy(data, iOffset+2, bytesTmp, 0, 4); 
			        bytesTmp[3]=(byte) (bytesTmp[3]&0xF0);
			        System.out.println("DIN1的数据为:"+KingPigeonUtils.bytesToIntLe(bytesTmp));
				}else if(sSensorAddr.equals("02")) {
					/*数据中bit28～31代表类型，1代表常闭，2代表常开，3代表变位，5计数器；*/
					System.out.println("DIN2的类型（1代表常闭，2代表常开，3代表变位，5计数器）为:"+KingPigeonUtils.bytesToHexString(data, iOffset+2+3,1).charAt(1));
					/*数据中bit27~bit0代表具体数值，数据类型为整型；*/
					byte[] bytesTmp = new byte[4];
			        System.arraycopy(data, iOffset+2, bytesTmp, 0, 4); 
			        bytesTmp[3]=(byte) (bytesTmp[3]&0xF0);
			        System.out.println("DIN2的数据为:"+KingPigeonUtils.bytesToIntLe(bytesTmp));
				}else if(sSensorAddr.equals("03")) {
					/*数据中bit28～31代表类型，1代表常闭，2代表常开，3代表变位，5计数器；*/
					System.out.println("DIN3的类型（1代表常闭，2代表常开，3代表变位，5计数器）为:"+KingPigeonUtils.bytesToHexString(data, iOffset+2+4,1).charAt(1));
					/*数据中bit27~bit0代表具体数值，数据类型为整型；*/
					byte[] bytesTmp = new byte[4];
			        System.arraycopy(data, iOffset+2, bytesTmp, 0, 4); 
			        bytesTmp[3]=(byte) (bytesTmp[3]&0xF0);
			        System.out.println("DIN3的数据为:"+KingPigeonUtils.bytesToIntLe(bytesTmp));
				}
			}else if(sSensorType.equals("05")) {
				if(sSensorAddr.equals("00")) {
					System.out.println("DOUT0的数据（0代表断开1代表闭合）为:"+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}else if(sSensorAddr.equals("01")) {
					System.out.println("DOUT1的数据（0代表断开1代表闭合）为:"+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}else if(sSensorAddr.equals("02")) {
					System.out.println("DOUT2的数据（0代表断开1代表闭合）为:"+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}else if(sSensorAddr.equals("03")) {
					System.out.println("DOUT3的数据（0代表断开1代表闭合）为:"+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}
			}else if(sSensorType.equals("04")) {
				if(sSensorAddr.equals("00")) {
					Float fSensorData = KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2);
					System.out.println("温度数据为:"+fSensorData);
				}else if(sSensorAddr.equals("01")) {
					Float fSensorData = KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2);
					System.out.println("湿度数据为:"+fSensorData);
				}
			}else if(sSensorType.equals("10")) {
				if(sSensorAddr.equals("10")) {
					System.out.println("GSM数据为:"+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("00")) {
					System.out.println("GSM数据为:"+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}
			}else if(sSensorType.equals("11")) {
				/*0代表撤防1代表留守2代表布防*/
				System.out.println("布撤防信息(0代表撤防1代表留守2代表布防)为:"+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
			}else if(sSensorType.equals("30")) {
				if(sSensorAddr.equals("00")) {
					System.out.println("电源电压大小："+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("01")) {
					System.out.println("AC电源电压状态[0代表消失(掉电)，1代表正常]："+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}else if(sSensorAddr.equals("02")) {
					System.out.println("AC电源电压状态："+KingPigeonUtils.bytesToIntLe(data, iOffset+2,4));
				}else if(sSensorAddr.equals("30")) {
					System.out.println("AC电源电压状态[0代表消失(掉电)，1代表正常]："+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}else if(sSensorAddr.equals("10")) {
					System.out.println("电池电压状态："+KingPigeonUtils.bytes4ToFloatLe(data, iOffset+2));
				}
			}
    	}

		ctx.writeAndFlush(Unpooled.copiedBuffer(KingPigeonUtils.bMsgPackageWithoutBody("70")));
	}

}
